package com.archive.forum.provider;

import com.alibaba.fastjson2.JSON;
import com.archive.forum.dto.AccessTokenDTO;
import com.archive.forum.dto.GithubUser;
import okhttp3.*;
import org.springframework.stereotype.Component;

import java.io.IOException;

//第三方登录接收方法
@Component
public class GithubProvider {
    public String getAccessToken(AccessTokenDTO accessTokenDTO) {
        // 设置请求的媒体类型为application/json;charset=utf-8
        MediaType mediaType = MediaType.get("application/json;charset=utf-8");
        // 创建OkHttpClient对象
        OkHttpClient client = new OkHttpClient();

        // 将accessTokenDTO对象转换为JSON字符串
        RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(accessTokenDTO));
        // 创建请求对象，设置请求的URL和请求方式为POST，并将请求体添加到请求中
        Request request = new Request.Builder()
                .url("https://github.com/login/oauth/access_token")
                .post(body)
                .build();
        try(Response response = client.newCall(request).execute()){
            // 获取响应体中的字符串
            String string = response.body().string();
            // 将字符串按照"&"分割，取第一个元素，再按照"="分割，取第二个元素，即为token
            String token= string.split("&")[0].split("=")[1];
            // 打印响应体中的字符串
            System.out.println(string);
            // 返回token
            return token;
        }catch (IOException e){
            // 捕获异常
            e.printStackTrace();
        }
        // 如果发生异常，返回null
        return null;
    }
    public GithubUser getUser(String accessToken){
        // 创建OkHttpClient对象
        OkHttpClient client = new OkHttpClient();
        // 创建Request对象，设置请求的URL和请求头
        Request request = new Request.Builder()
                .url("https://api.github.com/user")
                .header("Authorization","token "+accessToken)
                .build();
        try {
            // 执行请求，获取响应
            Response response = client.newCall(request).execute();
            // 获取响应体中的字符串
            String string = response.body().string();
            // 将字符串解析为GithubUser对象
            return JSON.parseObject(string, GithubUser.class);
        } catch (IOException e){
            // 捕获异常
            e.printStackTrace();
        }
        // 返回null
        return null;
    }
}
